package conn.dao;

import java.sql.Statement;
import conn.bean.BAbonado;
import conn.bean.BCampana;
import conn.bean.BEestadollamada;
import conn.bean.BEmpleado;
import conn.bean.BLinea;
import conn.bean.BLineaxcampana;
import conn.bean.BLlamada;
import conn.bean.BMensaje;
import conn.bean.BTipoLinea;


import java.util.ArrayList;
import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.io.PrintStream;

public class DCampana extends DBase {

    public List getCampanasEnProceso() {
        List Lista = new ArrayList();
        Statement stmt = null;
        ResultSet res = null;
    
        BTipoLinea btipolinea = null;
        BCampana bcampana = null;
        BEmpleado bempleado = null;
        BLinea blinea = null;
        BLineaxcampana blineaxcampana = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {
            stmt = conn.createStatement();
            res = stmt.executeQuery(
                    "select c.nombre, c.fechaInicio, c.fechaFin, e.nombre, e.apellidoPaterno, e.apellidoMaterno, count(l.idLinea), c.idCampana, c.prioridad "
                    + "from campana c, empleados e, linea l, lineaxcampana lxc "
                    + "where c.idEmpleado=e.idEmpleado and l.idLinea = lxc.idLinea and lxc.idCampana = c.idCampana and c.idEstadoCampana=1 group by 1; ");

            while (res.next()) {

                bempleado = new BEmpleado(0, res.getString(4), res.getString(5), res.getString(6), null, null, null);
                bcampana = new BCampana(0, res.getString(1), res.getString(2), res.getString(3), bempleado, null, null, null, null);
                bcampana.setNumlineas(res.getInt(7));
                bcampana.setIdCampana(res.getInt(8));
                bcampana.setPrioridad(res.getString(9));

                Lista.add(bcampana);
            }
            res.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return Lista;
    }


    public void asociarLineaCampana(int idCampana, int idLinea, String estado, String fechaAgregacion) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            stmt.executeUpdate(""
                    + " INSERT INTO lineaxcampana"
                    + " (idLinea, idCampana, estado, fecha_agregacion)"
                    + " VALUES"
                    + " (" + idLinea + "," + idCampana + ",'" + estado + "','" + fechaAgregacion + "')"
                    + "");

            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public void crearCampana(BCampana campana) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            stmt.executeUpdate(""
                    + " INSERT INTO Campana"
                    + " (nombre, fechaInicio, fechaFin, idEmpleado, idMensaje, prioridad,descripcion,idEstadoCampana)"
                    + " VALUES"
                    + " ('" + campana.getNombre() + "','" + campana.getFechainit() + "','" + campana.getFechafin() + "'," + campana.getEmpleado().getIdEmpleado() + "," + campana.getMensaje().getIdMensaje() + ",'" + campana.getPrioridad() + "','" + campana.getDescripcion() + "'," + campana.getEstado().getIdEstadocampana() + ")"
                    + "");

            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }


    public void borrarCampana(int id) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            stmt.executeUpdate("delete from campana where idCampana = " + id );

            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public List getmodcampanas() {
        List Lista = new ArrayList();
        Statement stmt = null;
        ResultSet res = null;
        BTipoLinea btipolinea = null;
        BCampana bcampana = null;
        BEmpleado bempleado = null;
        BLinea blinea = null;
        BLineaxcampana blineaxcampana = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {
            stmt = conn.createStatement();
            res = stmt.executeQuery(
                    "select c.nombre, c.fechaInicio, c.fechaFin, e.nombre, e.apellidoPaterno, e.apellidoMaterno, count(l.idLinea), c.idCampana, c.prioridad "
                    + "from campana c, empleados e, linea l, lineaxcampana lxc "
                    + "where c.idEmpleado=e.idEmpleado and l.idLinea = lxc.idLinea and lxc.idCampana = c.idCampana group by 1; ");

            while (res.next()) {

                bempleado = new BEmpleado(0, res.getString(4), res.getString(5), res.getString(6), null, null, null);
                bcampana = new BCampana(0, res.getString(1), res.getString(2), res.getString(3), bempleado, null, null, null, null);
                bcampana.setNumlineas(res.getInt(7));
                bcampana.setIdCampana(res.getInt(8));
                bcampana.setPrioridad(res.getString(9));

                Lista.add(bcampana);
            }
            res.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return Lista;
    }
    
    public BCampana getCampana(int idCampana) {
        List Lista = new ArrayList();
        Statement stmt = null;
        ResultSet res = null;
        BTipoLinea btipolinea = null;
        BCampana bcampana = null;
        BEmpleado bempleado = null;
        BLinea blinea = null;
        BLineaxcampana blineaxcampana = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {
            stmt = conn.createStatement();
            res = stmt.executeQuery(
                    "select c.nombre, c.fechaInicio, c.fechaFin, e.idEmpleado, e.apellidoPaterno, e.apellidoMaterno, count(l.idLinea), c.idCampana, c.idMensaje "
                    + "from campana c, empleados e, linea l, lineaxcampana lxc "
                    + "where c.idEmpleado=e.idEmpleado and l.idLinea = lxc.idLinea and lxc.idCampana = c.idCampana and c.idCampana="+idCampana +" group by 1; ");

            if (res.next()) {

                bempleado = new BEmpleado(res.getInt(4), "", res.getString(5), res.getString(6), null, null, null);
                bcampana = new BCampana(0, res.getString(1), res.getString(2), res.getString(3), bempleado, null, null, null, null);
                BMensaje bmensaje=new BMensaje();
                bmensaje.setIdMensaje(res.getInt(9));
                bcampana.setNumlineas(res.getInt(7));
                bcampana.setIdCampana(res.getInt(8));
                bcampana.setMensaje(bmensaje);

            }
            res.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return bcampana;
    }

    public int getUltimoId() {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos
        int id = 0;
        try {

            stmt = conn.createStatement();
            res = stmt.executeQuery("SELECT MAX(idCampana) from campana");

            if (res.next()) {

                id = res.getInt(1);
            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return id;
    }

    /*PARA ESTADOCAMPANA*/
    public List obtenerestadocampana(String id) {
        List Lista = new ArrayList();
        Statement stmt = null;
        ResultSet res = null;

        BCampana bcampana = new BCampana();
        BEmpleado bempleado = new BEmpleado();

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            res = stmt.executeQuery(
                    "select c.nombre, c.fechaInicio, c.fechaFin, e.nombre, e.apellidoPaterno, e.apellidoMaterno, count(l.numero), c.prioridad from campana c, empleados e, linea l, lineaxcampana lxc "
                    + "where c.idEmpleado =  e.idEmpleado and l.idLinea = lxc.idLinea and lxc.idCampana = c.idCampana  and c.idCampana = '" + id + "' "
                    + "group by c.nombre");

            while (res.next()) {
                //BCampana(int id, String nomb, String fi, String ff, BEmpleado empl, BMensaje men, String pri, String desc, BEstadocampana stcam) {

                /*   bempleado.setNombre(res.getString(4));
                bempleado.setApellidop(res.getString(5));
                bempleado.setApellidom(res.getString(6));

                bcampana.setNombre(res.getString(1));       //nombre
                bcampana.setFechainit(res.getString(2));     //fecha inicio
                bcampana.setFechafin(res.getString(3));     //fecha fin
                bcampana.setEmpleado(bempleado);            //nombre apellido
                bcampana.setNumlineas(res.getInt(7));       //numero de lineas
                bcampana.setPrioridad(res.getString(8));    //prioridad*/


                bempleado = new BEmpleado(0, res.getString(4), res.getString(5), res.getString(6), null, null, null);
                //public BEmpleado(int id, String no, String app, String apm, String usr, String pass, String emai) {
                bcampana = new BCampana(0, res.getString(1), res.getString(2), res.getString(3), bempleado, null, res.getString(8), null, null);
                //public BCampana(int id, String no, String fi, String ff, BEmpleado empl, BMensaje men, String pri, String desc, BEstadocampana stcam) {
                bcampana.setNumlineas(res.getInt(7));

                Lista.add(bcampana);

            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return Lista;
    }

    /*PARA ESTADOLLAMADA*/
    public List obtenerestadollamada(String id) {
        List Lista = new ArrayList();
        Statement stmt = null;
        ResultSet res = null;
        String query = null;
        BAbonado babonado = new BAbonado();
        BLinea blinea = new BLinea();
        BEestadollamada bestadollamada = new BEestadollamada();
        BLlamada bllamada = new BLlamada();
        BCampana bcampana = new BCampana();

        this.init_mysql();  // se inicia la conección a la base de datos

        try {
            stmt = conn.createStatement();

            query = "select l.numero, a.nombre, ll.estado, c.nombre from linea l, abonado a, llamada ll, campana c, estadollamada ell where ll.idCampana = c.idCampana and ll.idLinea = l.idLinea and ll.idEstadollamada = ell.idEstadollamada and l.idAbonado = a.idAbonado and c.idCampana = " + id;
            res = stmt.executeQuery(query);



            while (res.next()) {

                blinea.setNumero(res.getString(1));
                babonado.setNombre(res.getString(2));
                bllamada.setEstado(res.getString(3));
                bcampana.setNombre(res.getString(4));
                bestadollamada.setBlinea(blinea);
                bestadollamada.setBabonado(babonado);
                bestadollamada.setBllamada(bllamada);
                bestadollamada.setBcampana(bcampana);
                Lista.add(bestadollamada);
            }
            res.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return Lista;
    }

    public void actualizarCampana(BCampana bcampana) {
        /*FALTA EL METODO UPDATE*/
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            stmt.executeUpdate(" UPDATE  campana c"
                    + " SET nombre='"+bcampana.getNombre()+"',"
                    + " fechaInicio='"+bcampana.getFechainit()+"',"
                    + " fechaFin='"+bcampana.getFechafin()+"',"
                    + " idEmpleado="+bcampana.getEmpleado().getIdEmpleado()+","
                    + " idMensaje="+bcampana.getMensaje().getIdMensaje()
                    + " WHERE idCampana="+bcampana.getIdCampana()+";");
                    
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public void eliminarLineaAsociada(String idCampana, int idLinea) {
        /* FALTA EL METODO QUE ELIMINE DE LINEAXCAMPANA*/
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            stmt.executeUpdate(""
                    + " DELETE FROM lineaxcampana "
                    + " WHERE idLinea="+idLinea+" AND idCampana="+idCampana+";");

            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public String getCurrentTime () {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos
        String id = null;
        try {

            stmt = conn.createStatement();
            res = stmt.executeQuery("select now();");

            if (res.next()) {

                id = res.getString(1);
            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return id;
    }

    public String getStrCamp(int camp) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos
        String campa = null;
        try {

            stmt = conn.createStatement();
            res = stmt.executeQuery("select nombre from campana where idCampana = '" + camp + "';");

            if (res.next()) {

                campa = res.getString(1);
            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return campa;
    }


}
